#include "FileProcesser.h"

/*
===============================================================================
 Name        : FileProcesser.cpp
 Author      : Bram en Paul
 Version     : 0.1
 Description : OOPatronen
===============================================================================
*/


/**
 * Constructor
 *
 */
FileProcesser::FileProcesser()
{
	c = new CircuitCreator;
}

/**
 * Deze functie wordt aangeroepen om een file te openen, de filenaam moet meegegeven worden
 * 
 */
void FileProcesser::ReadFile(char* filename)
{
	string line;
	ifstream file;
	file.open(filename);

	if (file.is_open())
	{
			while (file.good())
			{
				getline(file,line);
				line = RemoveComment(line);
				line = RemoveSpace(line);
				UseLine(line);
			}
			file.close();
			c -> startCircuit();
	}

	else cout << "Unable to open file";
}

/**
 * Deze functie verwerkt 1 regel uit de file, er moet 1 regel worden meegegeven
 */
void FileProcesser::UseLine(string line)
{
	int j = 0;
	for(int i=0; i<line.length(); i++)
	{
		if(line[i] == ':' || line[i] == ',')
			j++;
	}
	string* temp = new string[(j+1)];

	j = 0;

	for(int i=0; i<line.length(); i++)
	{
		if(line[i] == ';')
		{
			if(!c -> nodeExists(temp[0]))
				c -> newNode(temp[0],temp[1]);
			else
			{
				string* newtemp = new string[(j)];
				copy(temp + 1, temp + (j+1), newtemp + 0);
				c -> connectNode(temp[0], newtemp, j);
			}
		}
		else
		{
			 if(line[i] == ':' || line[i] == ',')
				j++;
			 else
				temp[j] = temp[j] + line[i];
		}
	}
}

/**
 * Deze functie verwijdert de spaties en tabs uit een regel
 */
string FileProcesser::RemoveSpace(string line)
{
	for(int i=0; i<line.length(); i++)
		if(line[i] == ' ' || line[i] == '\t') {
			line.erase(i,1);
			i--;
		}
	return line;
}

/**
 * Deze functie verwijdert de comments uit een regel
 */
string FileProcesser::RemoveComment(string line)
{
	if(line[0] == '#')
		line = "";
	return line;
}


/**
 * Destructor
 *
 */
FileProcesser::~FileProcesser()
{

}
